//
//  UIScrollView+BCRefreshExt.h
//  BCScrollViewKit
//
//  Created by chasel. c on 2022/8/25.
//  下拉刷新扩展
/**
   header 和footer 分3中方式支持添加
   示例1:
   [tableView bc_addHeader:^{

   }];
   [tableView bc_addFooter:^{

   }];

   示例2（推荐）:
   @BCWeakify(self);
   tableView.addHeader(^{
     @BCStrongify(self);

   }).addFooter(^{
     @BCStrongify(self);

   });
   示例3: 需要内部self实现fetchDataWithLoadingMore：方法
    tableView.addHeaderTarget(self).addFooterTarget(self);

   示例4：内部辅助添加cell,header class
   _tableView.registerCellClass(UITableViewCell.class)
     .registerHeaderClass(UITableViewHeaderFooterView.class)
     .addHeader(^{

   }).addFooter(^{

   });
 
   
 */

#import <UIKit/UIKit.h>
#import "MJRefresh.h"

NS_ASSUME_NONNULL_BEGIN

@interface UIScrollView (BCRefreshExt)

/// 添加下拉刷新header
/// @param refreshingBlock动作 block回调
- (void)bc_addHeader:(MJRefreshComponentAction)refreshingBlock;

/// 添加下拉刷新header
/// @NOTE: target为出发回调事件持有者，内部会主动调用fetchDataWithLoadingMore：方法，必须实现此方法
- (UIScrollView * (^)(NSObject *target))addHeaderTarget;

/// 添加下拉刷新header
/// block内部添加回调参数
- (UIScrollView * (^)(MJRefreshComponentAction block))addHeader;


/// 添加上拉加载footer
/// @param refreshingBlock block回调
- (void)bc_addFooter:(MJRefreshComponentAction)refreshingBlock;


/// 添加上拉加载footer
///@NOTE: target为出发回调事件持有者，!内部会主动调用fetchDataWithLoadingMore：方法，必须实现此方法
- (UIScrollView * (^)(NSObject *target))addFooterTarget;


/// 添加上拉加载footer
/// block内部添加回调参数
- (UIScrollView * (^)(MJRefreshComponentAction block))addFooter;


/// 是否正在下拉刷新中
- (BOOL)bc_isHeaderRefreshing;
/// 结束下拉刷新
- (void)bc_headerEndRefreshing;
/// 隐藏下拉刷新
- (void)bc_hidenHeader;
/// 移除下拉刷新
- (void)bc_removeHeader;

/// 是否正在上拉加载中
- (BOOL)bc_isFooterRefreshing;
/// 结束上拉加载
- (void)bc_footerEndRefreshing;

/// 结束刷新 显示无数据
- (void)bc_endRefreshingWithNoMoreData;

/// 注册cell 支持UITableview,UICollectionView
/// @param aclass cell class
- (void)bc_registerCellClass:(Class)aclass;

/// 使用链式注册cell
- (UIScrollView * (^)(Class aclass))registerCellClass;


/// 注册header 支持UITableview,UICollectionView
/// @param aclass aclass description
- (void)bc_registerHeaderClass:(Class)aclass;

/// 使用链式注册header
- (UIScrollView * (^)(Class aclass))registerHeaderClass;

@end

NS_ASSUME_NONNULL_END
